package throws_;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @Author 小闽
 * @Date 2024/9/24 16:25
 * @PackageName: throws_
 * @ClassName: ThrowsDetails01
 * @Description: throws细节
 * @Version 1.0
 */
public class ThrowsDetails01 {
    public static void main(String[] args) throws ArithmeticException {
        f2();
    }
    public static void f2(){
        //1.对于编译异常，程序中必须处理，比如try-catch或者throws
        //2.对于运行时异常，程序中如果没有处理，默认就是throws的方式处理
        int num1 = 10;
        int num2 = 0;
        int res = num1/num2;
    }
    public static void f1() throws FileNotFoundException{
        // 注意：在f1()中去调用f3()方法会报错，因为f3()方法中的异常为编译异常
        // 而在java中编译异常则必须要去处理即f1()也需要进行使用throws去处理异常
        f3();
    }
    public static void f3() throws FileNotFoundException{
        FileInputStream fis = new FileInputStream("d://aa.txt");
    }
    public static void f5(){
        // 注意：在这里f5()方法中去调用f6会出现不报错的情况，因为f6()方法中的异常不是编译异常，
        // 而是运行时异常，这种异常通过是可以让系统默认处理机制自己去处理
        f6();
    }
    public static void f6() throws ArithmeticException{

    }
}
//3.子类重写父类的方法时，对抛出异常的规定：子类重写的方法，
// 所抛出的异常类型要么和父类抛出的异常一致，要么为父类抛出异常的类型的子类型
//4.在throws过程中，如果有方法try-catch,就相当于处理异常，就可以不必throws
class Father{
    public void method() throws RuntimeException{
        System.out.println("这是父类中method()方法的运行时异常...");
    }
}
class Son extends Father{
    @Override
    public void method() throws NullPointerException {
        System.out.println("这是子类中method()方法的运行时异常...");
    }
}

